package com.example.jmeter.enums;

import com.example.jmeter.dependent.Command;
import com.example.jmeter.entity.OsInstallFile;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

/**
 * @program: spring-agent
 * @description:
 * @author: zt22328 赵儒定
 * @create: 2023-04-19 16:24
 **/
public enum DependType {

    /**
     * .命令行参数
     * 4.1运行命令常用格式
     *
     * jmeter -n -t [jmx脚本路径] -l [测试输出文件路径]
     *
     * 参数解释：
     *
     * -n: 表示 non gui mode,就是非图形化模式
     *
     * -t: 即testplan，后跟要运行的jmeter脚本的路径和脚本名称。
     *
     *     若指定路径下没有指定名称的脚本，则自动创建。
     *
     *     若没有路径只写脚本名称，则默认是在当前目录查找或创建。
     *
     * -l: 后跟输出结果文件路径和结果文件名称。
     *
     *     若指定路径下没有指定名称的脚本，则自动创建，可以生成csv或者jtl文件。
     *
     *     若只写脚本名称，则默认是在当前目录查找或创建。
     *
     * 示例： jmeter -n -t testplan.jmx -l test.jtl
     *
     * 示例含义：以命令行模式运行当前目录下的testplan.jmx文件，并在当前目录下输出日志文件test.jtl
     * 其他参数：
     *
     * jmeter -n -t test.jmx -R 10.6.5.31,10.6.5.32 -l log.jtl
     *
     * jmeter -n -t test.jmx -l  log.jtl -H 192.168.1.1 -P 8080
     *
     * -r/R 远程执行 -> 启动远程服务，即分布式执行多台压力机
     *
     * -H 代理主机 -> 设置 JMeter 使用的代理主机
     *
     * -P 代理端口 -> 设置 JMeter 使用的代理主机的端口号
     *
     * 使用-R指定节点时，要首先在这些节点上启动jmeter-server的服务
     * 命令行启动远程压力机：
     *
     * ./jmeter -n -t <test.jmx> -r -l <test.jtl>     -r 启动所有远程压力机
     *
     * ./jmeter -n -t <test.jmx> -R ip1,ip2 -l <test.jtl>     -R 指定远程压力机
     */
    Jmeter(new HashMap<OsType, OsInstallFile>(){{
                put(OsType.Window, new OsInstallFile("https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.5.zip",
                        "79ea7ef2e76e4abd91eaaabb2a6e58f1", "bin\\jmeter.bat", "apache-jmeter-5.5"));
                put(OsType.Linux, new OsInstallFile("https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.5.gz",
                        "79ea7ef2e76e4abd91eaaabb2a6e58f1", "bin\\jmeter.sh", "apache-jmeter-5.5"));
            }},
            "5.5",
            JmeterCommand.VERSION.getCommand()) ,

    ;

    private Map<OsType, OsInstallFile> installFiles;

    private String version;

    private String versionCmd;


    DependType(Map<OsType, OsInstallFile> installFiles, String version, String versionCmd) {
        this.installFiles = installFiles;
        this.version = version;
        this.versionCmd = versionCmd;
    }

    public String getExecuteBin() {
        return installFiles.get(OsType.getCurrentOsType()).getBinExecute();
    }

    public String getVersion() {
        return version;
    }

    public String getVersionCmd() {
        return versionCmd;
    }

    public OsInstallFile getInstallFile() {
        return installFiles.get(OsType.getCurrentOsType());
    }

    public String getDownloadUrl() {
        return this.getInstallFile().getDownloadUrl();
    }

    public String getMd5Key() {
        return this.getInstallFile().getDownloadMd5Key();
    }
}
